name: CI testing

# see: https://help.github.com/en/actions/reference/events-that-trigger-workflows
on:
  # Trigger the workflow on push or pull request, but only for the master branch
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  pytest:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-20.04, macOS-11, windows-2019]
        python-version: [3.8]

    # Timeout: https://stackoverflow.com/a/59076067/4521646
    timeout-minutes: 35

    steps:
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}

      # Github Actions: Run step on specific OS: https://stackoverflow.com/a/57948488/4521646
      - name: Setup macOS
        if: runner.os == 'macOS'
        run: |
          brew install libomp  # https://github.com/pytorch/pytorch/issues/20030

      - name: Get pip cache dir
        id: pip-cache
        run: echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT

      - name: Cache pip
        uses: actions/cache@v2
        with:
          path: ${{ steps.pip-cache.outputs.dir }}
          key: ${{ runner.os }}-py${{ matrix.python-version }}-${{ hashFiles('requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-py${{ matrix.python-version }}-

      - name: Clone Template React UI Repo
        uses: actions/checkout@v3
        with:
          repository: Lightning-AI/lightning
          token: ${{ secrets.PAT_GHOST }}
          ref: "master"
          path: lightning

      - name: Install Lightning
        run: |
          cd lightning
          pip install -r requirements.txt
          pip install -e .
        shell: bash

      - name: Install dependencies
        run: |
          python --version
          pip --version
          pip install --requirement requirements.txt --upgrade --quiet --find-links https://download.pytorch.org/whl/cpu/torch_stable.html
          pip install --requirement tests/requirements.txt --quiet
          pip list
        shell: bash

      - name: Tests
        run: |
          coverage run --source placeholdername -m py.test placeholdername tests -v --junitxml=junit/test-results-${{ runner.os }}-${{ matrix.python-version }}.xml

      - name: Statistics
        if: success()
        run: |
          coverage report
